ASN1C编译器常见问题解答
有关ASN1C许可的问题,请参阅 我们的ASN1C编译器许可常见问题。这个产品是用在哪些型号的ASN.1规格上的?
ASN1C ASN.1编译器已经用于涉及定制和标准化ASN.1规范的各种项目中。以下是一些标准规范:ASN1C如何处理信息对象和参数化类型?
ASN1C编译器获取这些定义中包含的主要类型定义,并为这些类型生成精确的C/C++和/或Java编码器/解码器。有时涉及通过参数化定义和类别的层进行反向链接,以获得基本类型。编译器还能够从信息对象中提取嵌入式类型和值定义,并为它们生成代码。ASN1C是否支持X.682中指定的限制表?
ASN1C能够解析和生成限制表的代码。它们限制了多部分信息类型,并定义了出现在信息中的某些部分和在限制表中的值。ASN1C可以生成代码来使用这些表,这些表可以在一个步骤中对这些类型的信息进行编码或解码。这是通过在为这些类型的规范生成代码时将限定表符添加到ASN1C comand行来实现的。ASN1C生成的源代码是否可移植?
是的,生成的C和C++代码符合美国国家标准协会(ANSI)的标准。在C++版本中,避免使用不可移植的构造,如模板、I/O流操作符和异常,以确保最大程度的可移植性。运行时库的版本是可用的,其中包括源代码,而且它也是ANSI标准版,使将ASN1C代码移植到各种各样的平台成为可能。这些代码可以在实时嵌入式系统应用程序中使用吗?
我们可以为某些嵌入式目标提供C/C++二进制库,也可以为Java提供J2ME库或为C#提供C#压缩版库。可以为没有二进制文件的平台提供源代码。这段代码可以编辑为只包含完成特定编码或解码任务所必需的内容(您可以自己完成这项工作,或者我们可以为您创建一个定制包)。这可以让您创建占用空间较小的代码,即使是在空间限制最严格的系统中。ASN1C是否支持ASN.1标准版中指定的所有语法?
我们可以解析1990年到2015年标准版中定义的所有语法。为大多数项生成了等价的C、C++、C#或Java代码。有关目前不支持的项目信息,请参阅我们最新的发布说明。代码是否被认为是开源的?
这取决于你对“开源”的定义。它不是GNU意义上的免费下载。但是产品的版本是可用的,包括运行时C和C++源代码,允许终端用户将他们的应用程序移植到各种各样的平台。ASN1C是否支持旧的远程操作支持元素(ROSE)宏表示法(操作、错误等)?
ASN1C编译器有一个'1990'开关,支持这种表示法。这些关键字没有内置到标准ASN1C编译器中,因为它们不是ASN.1标准版的一部分,并且它们的使用可能会与关键字的其他使用发生冲突。这里有一篇描述ROSE宏支持的文章。ASN1C是否支持X.694标准版,以允许从XML模式生成ASN.1来产生XML数据的有效二进制编码?
ASN1C v6.0及更高版本支持直接编译XML模式定义(XSD)文件。按照X.694标准版,对ASN.1格式进行内部翻译。ASN1C发行版中还包含一个实用程序(xsd2asn1),用于将XML schema (XSD)文件转换为等效的ASN.1。在CAMEL应用程序部分(CAP)规范中,似乎没有为多少ASN.1类型定义生成类型/类别和编码器/解码器。它们的一般形式如下:
AccessPointName {PARAMETERS-BOUND: bound} ::= OCTET STRING当为许多ASN.1规范生成代码时,有些项的名称非常长。有没有办法把它们剪短?
默认情况下,ASN1C通过组合项目的所有中间嵌套名称为它生成的其他类型创建名称。在具有大量嵌套结构的规范中,这可能导致非常长的名称。在这些情况下,可以使用shortnames限定符生成更短的名称。当我在编译样品时使用Visual Studio 2005, 为什么我得到错误信息链接:严重错误LNK1104:无法打开文件'LIBC.lib'?
此错误通常是由于试图将示例程序链接到不正确的库而导致的。ASN1C的Windows包提供的示例程序使用的库是默认情况下用Visual Studio 6.0编译的。用于Visual Studio 2005的库在c_vs2005和cpp_vs2005目录中提供。将示例复制到适当的目录应该可以解决这个问题。如何在ASN.1规范中为模块或产品指定不同的整数类型?
be used to specify the integer type instead.-->默认情况下,无限制整数类型是32位宽的。如果规范限制了整数值的大小,ASN1C将生成尝试使用最小宽度类型的代码(例如,8位类型用于大小(1..255)限制)。如果不希望这样,则使用配置文件来指定整数类型。